import axios from 'axios'; import cookie from 'cookie'; import dynamic from 'next/dynamic'; import { useRouter } from 'next/router'; import { useEffect } from 'react'; import { useProductContext } from '@/contexts/ProductContext'; import Seo from '@/core/components/Seo'; import LogoSpinner from '@/core/components/elements/Spinner/LogoSpinner'; import { getIdFromSlug } from '@/core/utils/slug'; import PageNotFound from '@/pages/404'; const BasicLayout = dynamic(() => import('@/core/components/layouts/BasicLayout') ); const Product = dynamic(() => import('@/lib/product/components/Product/Product') ); export async function getServerSideProps(context) { const { slug } = context.query; const cookies = context.req.headers.cookie; const cookieObj = cookies ? cookie.parse(cookies) : {}; const auth = cookieObj.auth ? JSON.parse(cookieObj.auth) : {}; const tier = auth.pricelist ? auth.pricelist : false; const authToken = auth?.token || ''; try { const response = await axios( `${process.env.NEXT_PUBLIC_SELF_HOST}/api/shop/variant-detail?id=` + getIdFromSlug(slug) + '&auth=' + tier ); let product = response.data; if (product?.length == 1) { product = product[0]; } else { product = null; } return { props: { product }, }; } catch (error) { // kalau status 500 → tampilkan halaman 404 if (error.response && error.response.status === 500) { return { notFound: true }; } // kalau 404 dari API juga langsung 404 if (error.response && error.response.status === 404) { return { notFound: true }; } // kalau error lain, lempar agar bisa dilihat di console log server throw error; } } export default function ProductDetail({ product }) { const router = useRouter(); const { setProduct } = useProductContext(); useEffect(() => { if (product) { setProduct(product); } }, [product, setProduct]); if (!product) return ; return ( {!product && (
)} {product && }
); }